﻿#pragma once
#include "Index.h"

/**
 * 删除链表的节点.
 * https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/description/
 *
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。返回删除后的链表的头节点。
 * 保证链表中节点的值互不相同
 */
namespace DeleteListSingle
{
    class Solution
    {
    public:
        ListNode* deleteNode(ListNode* head, int val)
        {
            if(!head)
                return nullptr;

            //头插法
            ListNode dummy;
            dummy.next=head;

            //在未遇到要删除的链表节点则一直前进
            ListNode* pre=&dummy;
            ListNode* cur=pre->next;
            while(cur && cur->val!=val)
            {
                pre=pre->next;
                cur=cur->next;
            }

            //删除指定值的节点
            if(cur && cur->val==val)
                pre->next=cur->next;

            return dummy.next;
        }
    };
};
